package com.ys.p2Hashtable了解;

import java.util.*;

/**
 * 描述:
 ** 1.Hashtable类概述
 *  *   Hashtable和HashMap底层都是采用“哈希表”来实现的，使用方式也是类似的，不同的是Hashtable是线程安全的，也就意味着效率低下。
 *  *   回顾：可变字符串中StringBuffer是线程安全的，List接口中Vector是线程安全的，Map接口中Hashtable是线程安全的。
 *  * 2.Hashtable类的传统方法
 *  *   a)关于Hashtable的方法
 *  *      public synchronized Enumeration<K> keys()	    遍历所有的key，keys()方法类似于keySet()方法
 *  *      public synchronized Enumeration<V> elements()	遍历所有的value，elements()方法类似于values()方法
 *  *   b)关于Enumeration的方法
 *  *      注意：Enumeration类似于Iterator迭代器
 *  *      boolean hasMoreElements();	判断集合中是否有下一个元素可以迭代，如果有，则返回 true。
 *  *      E nextElement();	        返回迭代的下一个元素，并把指针向后移动一位。
 * @author CodeYang
 * @version 2020/12/28 17:01
 */
public class Hashtable了解 {
    public static void main(String[] args) {
        // Hahstable 底层也是采用"哈希表:(数组+链表,一般情况下)"
        Hashtable<Object, Object> hashtable = new Hashtable<>();

        hashtable.put("1",1);
        hashtable.put("2",2);
        hashtable.put("3",3);
        hashtable.put("4",4);
        hashtable.put("1",6);

        Iterator<Map.Entry<Object, Object>> iterator = hashtable.entrySet().iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
        // HashTable 与 HashMap 不同之处在于它的方法都加了锁,来保证线程安全.
        // like:   public synchronized V put(K key, V value) {
        // 2 : HashTable 的独有原生的方法
        // public synchronized Enumeration<K> keys() :: 类似与  map.keySet();
        Enumeration<Object> keys = hashtable.keys();
        // public synchronized Enumeration<V> elements()  类似 map.values();
        Enumeration<Object> elements = hashtable.elements();
        while (keys.hasMoreElements()){
            // nextElement() 类似 next
            System.out.println(keys.nextElement());
        }



    }
}
